// 返回一个新函数，不会执行
// 绑定this 和 部分参数
// 如果是箭头函数， 只能改变this 绑定参数

// @ts-ignore
Function.prototype.customBind = function (context: any, ...bindArgs: any[]) {
  // context是bind 传入的this
  // bindArgs 是bind 传入的各个参数

  const self = this; // 函数本身

  return function(...args: any[]) {
    // 拼接参数
    const newArgs = bindArgs.concat(args);
    return self.apply(context, newArgs)
  }
}


function fn(this: any, a: any, b:any) {
  console.log(this, a, b);
}

// @ts-ignore
const fn1 = fn.customBind({x: 100}, 10)
fn1(20)